<?php 
class visitacompController extends TController{
    
    protected $blocked_actions = array('editar');
    public $model_name = 'venda/visitacomp';
    public function __construct($vars) {
               
        $this->addToFreeCod('tele');
        $this->addToFreeCod('nmatriculado');
        $this->addToFreeCod('matriculado');
        $this->addToFreeCod('confirmado');
        $this->addToFreeCod('negado');
        $this->addToFreeCod('pendente');
        $this->addToFreeCod('recusou');
        $this->addToFreeCod('compareceu');
        $this->addToFreeCod('aguarda');
        
        parent::__construct($vars);
    }
    
    public function AfterLoad() {
        $this->model->distribuirVisitasPorAtendentes();
        parent::AfterLoad();
    }

    public function tele(){
        if($this->model->distribuirVisitasPorAtendentes()){
            Redirect(LINK."/pendente");
        }
        $this->setVars($this->model->getMessages());
        $this->display('');
    }
    public function confirmar(){
        $this->checkTelemkt();
        $this->change("confirmado");
    }
    public function cancelar(){
        $this->checkTelemkt();
        $this->change("negado");
    }
    public function comparecer(){
        $this->checkMatriculado();
        $this->change("compareceu");
    }
    public function ausentar(){
        $this->checkMatriculado();
        $this->change("ausente");
    }
    public function matricular(){
        $this->checkCompareceu();
        $this->change("matriculado");
    }
    public function nmatricular(){
        $this->checkCompareceu();
        $this->change("naomatriculado");
    }
    
    private function change($status){
        $bool = $this->model->changeStatus($this->cod, $status);
        $this->setVars($this->model->getMessages());
        $this->registerVar("status", ($bool === false)?'0':'1');
        $this->redirect(LINK."/tele");
    }
    
    public function detalhes(){
        Redirect('venda/visita/show/'.$this->item['__venda_visita_cod']);
    }
    
    public function nmatriculado(){
        $this->filther(__FUNCTION__, 'Não Matriculados');
    }
    public function matriculado(){
        $this->filther(__FUNCTION__, 'Matriculados');
    }
    public function confirmado(){
        $this->filther(__FUNCTION__, 'Confirmados');
    }
    public function negado(){
        $this->filther(__FUNCTION__, 'Cancelados');
    }
    public function pendente(){
        $this->filther(__FUNCTION__, 'Pendentes');
    }
    public function recusou(){
        $this->filther(__FUNCTION__, 'Recusado pelo Vendedor');
    }
    public function compareceu(){
        $this->filther(__FUNCTION__, 'Compareceram');
    }
    public function aguarda(){
        $this->filther('compareceu', 'Compareceram no evento e aguardam matrícula');
    }
    private function filther($filther, $title){
        $this->setPage();
        $this->genTags($title);
        $this->registerVar('title', $title);
        $this->registerVar("item"        , $this->model->$filther($this->page));
        $this->registerVar("comp_action" , $this->getIndexListType());
        $this->registerVar("show_links"  , '');
    	$this->display(LINK ."/tele");
    }
    
    private function checkTelemkt(){
        if(!$this->model->checkTelemarketinCanAlter($this->item['__venda_visita_cod'], $this->item['__venda_visitacomp_status']))
                $this->echoJson($this->model->getErrorMessage());
    }
    private function checkMatriculado(){
        if(in_array($this->item['__venda_visitacomp_status'], array('matriculado','naomatriculado')))
            $this->echoJson('Você não pode modificar o status de quem a situação da matrícula foi supervisionada');
        
        $ev = $this->getEvent(array('venda_evento_termino', 'venda_evento_inicio'));
        
        //verifica se evento já está encerrado
        $diff = timeResource::diffDate($ev['venda_evento_termino'], '', 'Mi');
        if($diff > 0)$this->echoJson('Este evento já está encerrado');

        //verifica se já passou o prazo para cadastrar no evento
        $diff = timeResource::diffDate($ev['venda_evento_inicio'], '', 'Mi');
        if($diff > 30)$this->echoJson('O Prazo de 30 minutos após o início do evento para modificar a presença acabou.');
        
        //verifica o prazo para o início da confirmação da presença de pessoas no evento
        if($diff < -120){
            $sub = timeResource::Date2StrBr(timeResource::subDateTime($ev['venda_evento_inicio'], 2, 'hour'));
            $this->echoJson("A confirmação de presentes no evento estará disponível a partir de $sub");
        }
        
    }
    
    private function checkCompareceu(){
        
        if(!in_array($this->item['__venda_visitacomp_status'], array('compareceu','ausente','matriculado','naomatriculado')))
            $this->echoJson('Você só pode matricular alunos que compareceram ao evento');
        
        $ev = $this->getEvent(array('venda_evento_termino'));
        $diff = timeResource::diffDate($ev['venda_evento_termino'], '', 'Mi');
        if($diff < 0) $this->echoJson('Você só pode matricular alunos após o término do evento de apresentação');
    }
    
    private function getEvent($campos){
        $cod_visita = $this->item['__venda_visita_cod'];
        $this->LoadModel('venda/visita', 'vis');
        $this->LoadModel('venda/evento', 'ev');
        $this->ev->db->Join($this->ev->getTable(),$this->vis->getTable(), array('venda_evento_cod'), array('venda_evento_cod'), "LEFT");
        $evento = $this->ev->selecionar($campos, "venda_visita_cod = '$cod_visita'");
        if(empty($evento)) {return;}
        return array_shift ($evento);
    }
    
    private function echoJson($msg, $status = '0'){
        $arr = ($status == '0')? array('status' => "0", 'erro' => "$msg"): array('status' => "1", 'success' => "$msg");
        die(json_encode($arr));
    }
    
    public function apagar() {
        $this->LoadModel('venda/visita', 'vis');
        $visita = $this->vis->getItem($this->item['__venda_visita_cod']);
        $this->LoadClassFromPlugin('venda/visita/visitaChecar', 'vc');
        if(!$this->vc->checarVisita($visita)){
            $this->setVars($this->vc->getMessages());
            $this->display('');
            return;
        }
        parent::apagar();
    }
}
?>